/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package be;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * Sistema de Control Acádemico (saca) creado por Buñay Paulo
 */
@Entity
@Table(name = "ALUMNO")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Alumno.findAll", query = "SELECT a FROM Alumno a"),
    @NamedQuery(name = "Alumno.findByIdAlumno", query = "SELECT a FROM Alumno a WHERE a.idAlumno = :idAlumno"),
    @NamedQuery(name = "Alumno.findByCedulaAlumno", query = "SELECT a FROM Alumno a WHERE a.cedulaAlumno = :cedulaAlumno"),
    @NamedQuery(name = "Alumno.findByRutaFotoAlumno", query = "SELECT a FROM Alumno a WHERE a.rutaFotoAlumno = :rutaFotoAlumno"),
    @NamedQuery(name = "Alumno.findByPrimerNombreAlumno", query = "SELECT a FROM Alumno a WHERE a.primerNombreAlumno = :primerNombreAlumno"),
    @NamedQuery(name = "Alumno.findBySegundoNombreAlumno", query = "SELECT a FROM Alumno a WHERE a.segundoNombreAlumno = :segundoNombreAlumno"),
    @NamedQuery(name = "Alumno.findByPrimerApellidoAlumno", query = "SELECT a FROM Alumno a WHERE a.primerApellidoAlumno = :primerApellidoAlumno"),
    @NamedQuery(name = "Alumno.findBySegundoApellidoAlumno", query = "SELECT a FROM Alumno a WHERE a.segundoApellidoAlumno = :segundoApellidoAlumno"),
    @NamedQuery(name = "Alumno.findByFechaNacimientoAlumno", query = "SELECT a FROM Alumno a WHERE a.fechaNacimientoAlumno = :fechaNacimientoAlumno"),
    @NamedQuery(name = "Alumno.findBySexoAlumno", query = "SELECT a FROM Alumno a WHERE a.sexoAlumno = :sexoAlumno"),
    @NamedQuery(name = "Alumno.findByDireccionAlumno", query = "SELECT a FROM Alumno a WHERE a.direccionAlumno = :direccionAlumno"),
    @NamedQuery(name = "Alumno.findByEmailAlumno", query = "SELECT a FROM Alumno a WHERE a.emailAlumno = :emailAlumno"),
    @NamedQuery(name = "Alumno.findByTelFijoAlumno", query = "SELECT a FROM Alumno a WHERE a.telFijoAlumno = :telFijoAlumno"),
    @NamedQuery(name = "Alumno.findByTelMovilAlumno", query = "SELECT a FROM Alumno a WHERE a.telMovilAlumno = :telMovilAlumno"),
    @NamedQuery(name = "Alumno.findByTipoSangreAlumno", query = "SELECT a FROM Alumno a WHERE a.tipoSangreAlumno = :tipoSangreAlumno"),
    @NamedQuery(name = "Alumno.findByAlergiasAlumno", query = "SELECT a FROM Alumno a WHERE a.alergiasAlumno = :alergiasAlumno"),
    @NamedQuery(name = "Alumno.findByFechaRegistroAlumno", query = "SELECT a FROM Alumno a WHERE a.fechaRegistroAlumno = :fechaRegistroAlumno")})
public class Alumno implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_ALUMNO")
    private Integer idAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 11)
    @Column(name = "CEDULA_ALUMNO")
    private String cedulaAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "RUTA_FOTO_ALUMNO")
    private String rutaFotoAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "PRIMER_NOMBRE_ALUMNO")
    private String primerNombreAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "SEGUNDO_NOMBRE_ALUMNO")
    private String segundoNombreAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "PRIMER_APELLIDO_ALUMNO")
    private String primerApellidoAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "SEGUNDO_APELLIDO_ALUMNO")
    private String segundoApellidoAlumno;
    @Basic(optional = false)
    @NotNull
    @Column(name = "FECHA_NACIMIENTO_ALUMNO")
    @Temporal(TemporalType.DATE)
    private Date fechaNacimientoAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 2)
    @Column(name = "SEXO_ALUMNO")
    private String sexoAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 400)
    @Column(name = "DIRECCION_ALUMNO")
    private String direccionAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "EMAIL_ALUMNO")
    private String emailAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "TEL_FIJO_ALUMNO")
    private String telFijoAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "TEL_MOVIL_ALUMNO")
    private String telMovilAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 25)
    @Column(name = "TIPO_SANGRE_ALUMNO")
    private String tipoSangreAlumno;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 400)
    @Column(name = "ALERGIAS_ALUMNO")
    private String alergiasAlumno;
    @Basic(optional = false)
    @NotNull
    @Column(name = "FECHA_REGISTRO_ALUMNO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaRegistroAlumno;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "alumno", fetch = FetchType.LAZY)
    private List<DetalleAlumnoCursoQuimestre> detalleAlumnoCursoQuimestreList;
    @JoinColumn(name = "ID_ESTADO_ALUMNO", referencedColumnName = "ID_ESTADO_ALUMNO")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private EstadoAlumno estadoAlumno;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "alumno", fetch = FetchType.LAZY)
    private List<DetalleAlumnoCursoParcial> detalleAlumnoCursoParcialList;

    public Alumno() {
    }

    public Alumno(Integer idAlumno) {
        this.idAlumno = idAlumno;
    }

    public Alumno(Integer idAlumno, String cedulaAlumno, String rutaFotoAlumno, String primerNombreAlumno, String segundoNombreAlumno, String primerApellidoAlumno, String segundoApellidoAlumno, Date fechaNacimientoAlumno, String sexoAlumno, String direccionAlumno, String emailAlumno, String telFijoAlumno, String telMovilAlumno, String tipoSangreAlumno, String alergiasAlumno, Date fechaRegistroAlumno) {
        this.idAlumno = idAlumno;
        this.cedulaAlumno = cedulaAlumno;
        this.rutaFotoAlumno = rutaFotoAlumno;
        this.primerNombreAlumno = primerNombreAlumno;
        this.segundoNombreAlumno = segundoNombreAlumno;
        this.primerApellidoAlumno = primerApellidoAlumno;
        this.segundoApellidoAlumno = segundoApellidoAlumno;
        this.fechaNacimientoAlumno = fechaNacimientoAlumno;
        this.sexoAlumno = sexoAlumno;
        this.direccionAlumno = direccionAlumno;
        this.emailAlumno = emailAlumno;
        this.telFijoAlumno = telFijoAlumno;
        this.telMovilAlumno = telMovilAlumno;
        this.tipoSangreAlumno = tipoSangreAlumno;
        this.alergiasAlumno = alergiasAlumno;
        this.fechaRegistroAlumno = fechaRegistroAlumno;
    }

    public Integer getIdAlumno() {
        return idAlumno;
    }

    public void setIdAlumno(Integer idAlumno) {
        this.idAlumno = idAlumno;
    }

    public String getCedulaAlumno() {
        return cedulaAlumno;
    }

    public void setCedulaAlumno(String cedulaAlumno) {
        this.cedulaAlumno = cedulaAlumno;
    }

    public String getRutaFotoAlumno() {
        return rutaFotoAlumno;
    }

    public void setRutaFotoAlumno(String rutaFotoAlumno) {
        this.rutaFotoAlumno = rutaFotoAlumno;
    }

    public String getPrimerNombreAlumno() {
        return primerNombreAlumno;
    }

    public void setPrimerNombreAlumno(String primerNombreAlumno) {
        this.primerNombreAlumno = primerNombreAlumno;
    }

    public String getSegundoNombreAlumno() {
        return segundoNombreAlumno;
    }

    public void setSegundoNombreAlumno(String segundoNombreAlumno) {
        this.segundoNombreAlumno = segundoNombreAlumno;
    }

    public String getPrimerApellidoAlumno() {
        return primerApellidoAlumno;
    }

    public void setPrimerApellidoAlumno(String primerApellidoAlumno) {
        this.primerApellidoAlumno = primerApellidoAlumno;
    }

    public String getSegundoApellidoAlumno() {
        return segundoApellidoAlumno;
    }

    public void setSegundoApellidoAlumno(String segundoApellidoAlumno) {
        this.segundoApellidoAlumno = segundoApellidoAlumno;
    }

    public Date getFechaNacimientoAlumno() {
        return fechaNacimientoAlumno;
    }

    public void setFechaNacimientoAlumno(Date fechaNacimientoAlumno) {
        this.fechaNacimientoAlumno = fechaNacimientoAlumno;
    }

    public String getSexoAlumno() {
        return sexoAlumno;
    }

    public void setSexoAlumno(String sexoAlumno) {
        this.sexoAlumno = sexoAlumno;
    }

    public String getDireccionAlumno() {
        return direccionAlumno;
    }

    public void setDireccionAlumno(String direccionAlumno) {
        this.direccionAlumno = direccionAlumno;
    }

    public String getEmailAlumno() {
        return emailAlumno;
    }

    public void setEmailAlumno(String emailAlumno) {
        this.emailAlumno = emailAlumno;
    }

    public String getTelFijoAlumno() {
        return telFijoAlumno;
    }

    public void setTelFijoAlumno(String telFijoAlumno) {
        this.telFijoAlumno = telFijoAlumno;
    }

    public String getTelMovilAlumno() {
        return telMovilAlumno;
    }

    public void setTelMovilAlumno(String telMovilAlumno) {
        this.telMovilAlumno = telMovilAlumno;
    }

    public String getTipoSangreAlumno() {
        return tipoSangreAlumno;
    }

    public void setTipoSangreAlumno(String tipoSangreAlumno) {
        this.tipoSangreAlumno = tipoSangreAlumno;
    }

    public String getAlergiasAlumno() {
        return alergiasAlumno;
    }

    public void setAlergiasAlumno(String alergiasAlumno) {
        this.alergiasAlumno = alergiasAlumno;
    }

    public Date getFechaRegistroAlumno() {
        return fechaRegistroAlumno;
    }

    public void setFechaRegistroAlumno(Date fechaRegistroAlumno) {
        this.fechaRegistroAlumno = fechaRegistroAlumno;
    }

    @XmlTransient
    public List<DetalleAlumnoCursoQuimestre> getDetalleAlumnoCursoQuimestreList() {
        return detalleAlumnoCursoQuimestreList;
    }

    public void setDetalleAlumnoCursoQuimestreList(List<DetalleAlumnoCursoQuimestre> detalleAlumnoCursoQuimestreList) {
        this.detalleAlumnoCursoQuimestreList = detalleAlumnoCursoQuimestreList;
    }

    public EstadoAlumno getEstadoAlumno() {
        return estadoAlumno;
    }

    public void setEstadoAlumno(EstadoAlumno estadoAlumno) {
        this.estadoAlumno = estadoAlumno;
    }

    @XmlTransient
    public List<DetalleAlumnoCursoParcial> getDetalleAlumnoCursoParcialList() {
        return detalleAlumnoCursoParcialList;
    }

    public void setDetalleAlumnoCursoParcialList(List<DetalleAlumnoCursoParcial> detalleAlumnoCursoParcialList) {
        this.detalleAlumnoCursoParcialList = detalleAlumnoCursoParcialList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idAlumno != null ? idAlumno.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Alumno)) {
            return false;
        }
        Alumno other = (Alumno) object;
        if ((this.idAlumno == null && other.idAlumno != null) || (this.idAlumno != null && !this.idAlumno.equals(other.idAlumno))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "be.Alumno[ idAlumno=" + idAlumno + " ]";
    }

}
